#include <head.h>
int set_up(const char *src,const char *dest)//创建目标文件，获取源文件大小
{
    int src_fd=open(src,O_RDONLY);
    if (-1==src_fd)
    
    {
        perror("open error");
        return -1;
    }
    int size=lseek(src_fd,0,SEEK_END);
    close(src_fd);

    int dest_fd=open(dest,0,O_WRONLY|O_CREAT|O_TRUNC,0666);
    if(-1==dest_fd)
    {
        perror("open error");
        return -1;
    }
    close(dest_fd);
    return size;   
}
void cp_src_to_dest(const char *src,const char *dest,int offset,int size)
{ 
    int src_fd=0;
    int dest_fd=0;
    if(-1==(src_fd=open(src,O_RDONLY)))
    {
        perror("open error");
        exit(-1);
    }
    if (-1==(dest_fd=open(dest,O_WRONLY)))
    {
        perror("open error");
        exit(-1);
    }
    lseek(src_fd,offset,SEEK_SET);
    lseek(dest_fd,offset,SEEK_SET);
    int ret=0;
    // int num=0;
    char buf[64]={0};
    while (1)
    {
        ret=read(src_fd,buf,sizeof(buf));
        if(0==ret)
        {
            break;
        }
        // num+=ret;
        // if(num > size)
        // {
        //     write(dest_fd,buf,size - (num - ret));
        //     break;
        // }
        write(dest_fd,buf,ret);
    }
    close(src_fd);
    close(dest_fd);
}
int main(int argc, char const *argv[])
{
    if(3!=argc)
    {
        printf("错误");
        return -1;
    }
    int size=0;
    size=set_up(argv[1],argv[2]);
    pid_t pid=0;
    if(-1==(pid=fork()))
    {
        perror("fork error");
        return -1;
    }
    else if(0==pid)
    {
        cp_src_to_dest(argv[1],argv[2],0,size/2);
    }
    else if(0<pid){
        cp_src_to_dest(argv[1],argv[2],size/2,size-size/2);

    }
    return 0;
}
